/*
 * @lc app=leetcode.cn id=498 lang=javascript
 *
 * [498] 对角线遍历
 */

// @lc code=start
/**
 * @param {number[][]} mat
 * @return {number[]}
 */
// 由规律每一个对角线上的坐标(x,y)，x + y = i(当前遍历的次数) 
 var findDiagonalOrder = function(mat) {
  let yl = mat.length
  if (!yl) return mat
  let xl = mat[0].length
  if (!xl) return mat
  let res = []
  for (let i = 0; i < xl + yl; i++) {
    if (i % 2) {
      let x = i < xl ? i : xl - 1
      let y = i - x
      while (x >= 0 && y < yl) {
        res.push(mat[y++][x--])
      }
    } else {
      let y = i < yl ? i : yl - 1
      let x = i - y
      while (y >= 0 && x < xl) {
        res.push(mat[y--][x++])
      }
    }
  }
  return res
};
// @lc code=end
// 所有的都从，左上像右下push
// 总共有 xl + yl - 1次，遇到偶数次就翻转赋值
// var findDiagonalOrder = function(mat) {
//   let yl = mat.length
//   let xl = mat[0].length
//   let total = xl + yl - 1
//   let res = []
//   for (let i = 0; i < total; i++) {
//     let arr = []
//     let flag = i < xl
//     let x = flag ? i : xl - 1
//     let y = flag ? 0 : i - xl + 1
//     while (y < yl && x >= 0) {
//       arr.push(mat[y++][x--])
//     }
//     if (i % 2) {
//       res.push(...arr)
//     } else {
//       res.push(...arr.reverse())
//     }
//   }
//   return res
// };
